package com.ruoyi.sbgl.service.impl;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;

import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.sbgl.mapper.TbSbglSjcjMapper;
import com.ruoyi.sbgl.domain.TbSbglSjcj;
import com.ruoyi.sbgl.service.ITbSbglSjcjService;

import static com.ruoyi.util.tools.generateOperateId;
import static com.ruoyi.util.tools.testApiAsync;

/**
 * 水表数据采集Service业务层处理
 *
 * @author ruoyi
 * @date 2023-11-16
 */
@Service
public class TbSbglSjcjServiceImpl implements ITbSbglSjcjService
{
    @Autowired
    private TbSbglSjcjMapper tbSbglSjcjMapper;

    /**
     * 查询水表数据采集
     *
     * @param id 水表数据采集主键
     * @return 水表数据采集
     */
    @Override
    public TbSbglSjcj selectTbSbglSjcjById(Long id)
    {
        return tbSbglSjcjMapper.selectTbSbglSjcjById(id);
    }

    /**
     * 查询水表数据采集列表
     *
     * @param tbSbglSjcj 水表数据采集
     * @return 水表数据采集
     */
    @Override
    public List<TbSbglSjcj> selectTbSbglSjcjList(TbSbglSjcj tbSbglSjcj)
    {
        return tbSbglSjcjMapper.selectTbSbglSjcjList(tbSbglSjcj);
    }

    /**
     * 新增水表数据采集
     *
     * @param tbSbglSjcj 水表数据采集
     * @return 结果
     */
    @Override
    public int insertTbSbglSjcj(TbSbglSjcj tbSbglSjcj)
    {
        return tbSbglSjcjMapper.insertTbSbglSjcj(tbSbglSjcj);
    }

    /**
     * 修改水表数据采集
     *
     * @param tbSbglSjcj 水表数据采集
     * @return 结果
     */
    @Override
    public int updateTbSbglSjcj(TbSbglSjcj tbSbglSjcj)
    {//关阀门
        String url = "http://api2.tqdianbiao.com/Api_v2/water_control";

        // 请求内容，调用接口所需要的数据（水表关阀）
        List<Map<String, Object>> req = new ArrayList<>();
        Map<String, Object> item = new HashMap<>();

        item.put("opr_id", generateOperateId());
        item.put("time_out", 0);
        item.put("must_online", true);
        item.put("retry_times", 1);
        item.put("cid", "68102309042827");
        item.put("address", "68102309042827");
        item.put("type", 53);
        req.add(item);

        String request_content = JSON.toJSONString(req);
        System.out.println("关阀内容"+request_content);

        testApiAsync(url, request_content,53);


        return tbSbglSjcjMapper.updateTbSbglSjcj(tbSbglSjcj);
    }

    @Override
    public int updateTbSbglSjcj1(TbSbglSjcj tbSbglSjcj) {
        //开阀门
        String url = "http://api2.tqdianbiao.com/Api_v2/water_control";

        // 请求内容，调用接口所需要的数据（水表开阀）
        List<Map<String, Object>> req = new ArrayList<>();
        Map<String, Object> item = new HashMap<>();

        item.put("opr_id", generateOperateId());
        item.put("time_out", 0);
        item.put("must_online", true);
        item.put("retry_times", 1);
        item.put("cid", "68102309042827");
        item.put("address", "68102309042827");
        item.put("type", 43);
        req.add(item);

        String request_content = JSON.toJSONString(req);
        testApiAsync(url, request_content,43);

        return tbSbglSjcjMapper.updateTbSbglSjcj(tbSbglSjcj);
    }

    /**
     * 批量删除水表数据采集
     *
     * @param ids 需要删除的水表数据采集主键
     * @return 结果
     */
    @Override
    public int deleteTbSbglSjcjByIds(Long[] ids)
    {
        return tbSbglSjcjMapper.deleteTbSbglSjcjByIds(ids);
    }

    /**
     * 删除水表数据采集信息
     *
     * @param id 水表数据采集主键
     * @return 结果
     */
    @Override
    public int deleteTbSbglSjcjById(Long id)
    {
        return tbSbglSjcjMapper.deleteTbSbglSjcjById(id);
    }

    @Override
    public List<TbSbglSjcj> selectTbSbglSjcjListcaji(TbSbglSjcj tbSbglSjcj) {
        //调用水表数据采集接口，加入数据库
        String url = "http://api2.tqdianbiao.com/Api_v2/water_read";

        // 请求内容，调用接口所需要的数据（抄水表数据）
        List<Map<String, Object>> req = new ArrayList<>();
        Map<String, Object> item = new HashMap<>();
        item.put("opr_id", generateOperateId());
        item.put("time_out", 0);
        item.put("must_online", true);
        item.put("retry_times", 1);
        item.put("cid", "68102309042827");
        item.put("address", "68102309042827");
        item.put("type", 42);
        req.add(item);

        String request_content = JSON.toJSONString(req);
        testApiAsync(url, request_content,42);

        return tbSbglSjcjMapper.selectTbSbglSjcjList(tbSbglSjcj);
    }

    @Override
    public Double selectTbSbglSjcjListwatersum() {

        return tbSbglSjcjMapper.selectWatersum();
    }
}
